#include <iostream>
#include <cstdio>
using namespace std;

// l'overloading dei costruttori consentono sia di garantire maggiore flessibilità,
// sia di creare oggetti inizializzati e non inizializzati, sia di creare costruttori di copie
// quando si crea una classe per la quale esistono due o più modi per costruire un oggetto
// è opportuno fornire una funzione costruttore modificata tramite overloading per questi diversi
// modi. 
// Se si cerca di creare un oggetto per il quale non esiste un costruttore viene prodotto
// un errore in fase di // compilazione


// Primo esempio per garantire maggiore flessibilità

class data {
int giorno, mese, anno;
public:
	data (char *);
	data (int , int , int );
	void mostra_data();
};

// inizializzazione con una stringa
data::data(char *d)
{
sscanf(d, "%d%*c%d%*c%d", &giorno, &mese, &anno);
}

// inizializzazione con interi
data::data(int g, int m, int a)
{
giorno=g;
mese=m;
anno=a;
}


void data::mostra_data()
{
cout << giorno <<"/"<<mese<<"/"<<anno<<endl;	
}


int main()
{
char s[80];
data oggetto1(20,02,1969), oggetto2("20/02/1969");
oggetto1.mostra_data();
oggetto2.mostra_data();
cout <<"immettere nuova data"<<endl;
cin  >>s;
data d(s);
d.mostra_data();
	return 0;
}


